package com.example.Controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.dao.MenuMapper;
import com.example.pojo.Menu;
import com.example.pojo.User;
import com.example.util.Result;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.LinkedList;
import java.util.List;

@Api(tags = "菜单管理")
@CrossOrigin
@RestController
public class MenuController {

    @Autowired
    private MenuMapper menuMapper;
    //根据部门和职位获取菜单
    @PostMapping("/selectMenuByAffiliationAndPosition")
    private Result selectMenuByAffiliationAndPosition(@RequestBody User user){
        List<Menu> menu;
        QueryWrapper<Menu> queryWrapper=new QueryWrapper<>();
        //MyBatis-Plus 的条件拼接是链式的，eq 和其他条件的顺序会影响最终生成的 SQL。
        //如果 eq("level", 0) 后面还有其他条件，可能会导致逻辑错误。
        // 1. 设置 level 条件
        queryWrapper.eq("level", 0);
        if (user.getDepartmentId()!=null){
            // 2. 设置 affiliation 条件，并包裹 OR 条件
            queryWrapper.and(qw -> qw.eq("affiliation", user.getDepartmentId()).or().eq("affiliation", 0));
        }
        // 3. 设置 position_id 条件
        queryWrapper.ge("position_id", user.getPositionId());
        //获取一级菜单
        menu=menuMapper.selectList(queryWrapper);
        for (Menu menu1 : menu) {
            //查询是否有二级菜单
            QueryWrapper<Menu> queryWrapper1=new QueryWrapper<>();
            queryWrapper1.eq("level",menu1.getId());
            List<Menu> menu2=menuMapper.selectList(queryWrapper1);
            if(menu2!=null){
                //添加二级进入一级
                List<Menu> menu4=new LinkedList<>();
                for (Menu menu3 : menu2) {
                    menu4.add(menu3);
                }
                menu1.setMenu( menu4 );
            }
        }
        return new Result<>("200","获取成功",menu);
    }


}
